﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NHibernate.Cfg;
using NHibernate;
using BuildHelper.Domain;
using DevExpress.XtraGrid.Views.Grid;

namespace BuildHelper.Setup.Pliki
{
    public partial class FormPlikiNHibernate : Form
    {
        public FormPlikiNHibernate()
        {
            InitializeComponent();
        }

        private void FormPlikiNHibernate_Load(object sender, EventArgs e)
        {

        }
        DomainObjectBindingListView<GrupaPlikow> ds;

        private void GetGrupyPlikow()
        {
            //using (var session = Domain.BaseDomainObject.SessionFactory.OpenSession())
            //{
            //    IQuery nhQuery = session.CreateQuery("FROM GrupaPlikow");
            //    IList<Domain.GrupaPlikow> grupy = nhQuery.List<Domain.GrupaPlikow>();
            //}
            IList<Domain.GrupaPlikow> grupy2 = Domain.GrupaPlikow.GetAllRecords < GrupaPlikow>();
            ds = new DomainObjectBindingListView<GrupaPlikow>(grupy2);
            plikBindingSource.DataSource = ds;

            //Domain.GrupaPlikow gr = Domain.GrupaPlikow.GetById<Domain.GrupaPlikow>(1);
        }
        private void GetGrupyPlikow(int p)
        {
            IList<Domain.GrupaPlikow> grupy2 = new List<GrupaPlikow>();
            GrupaPlikow g = Domain.GrupaPlikow.GetById<Domain.GrupaPlikow>(p);
            if (g != null)
                grupy2.Add(g);
            plikBindingSource.DataSource = grupy2;
        }
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            GetGrupyPlikow();
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            using (var session = DomainHelper.SessionFactory.OpenSession())
            {
                using (var tr = session.BeginTransaction())
                {
                    bool result = true;
                    result = ds.TrySave(session);
                    if (result)
                        result = tr.TryCommit();
                    if (result)
                    {
                        ds.AcceptChanges();
                    }
                    else
                    {
                        this.ShowDxErrorDialog("Błąd zapisu!");
                        DomainHelper.LastException.LogError();
                    }
                }
            }
        }

        private void gridView1_InitNewRow(object sender, InitNewRowEventArgs e)
        {
            GrupaPlikow g = (sender as GridView).GetRow(e.RowHandle) as GrupaPlikow;
            if (g != null)
                g.SetAdded();
        }

        private void gridView2_InitNewRow(object sender, InitNewRowEventArgs e)
        {
            GridView gv = sender as GridView;
            Plik g = gv.GetRow(e.RowHandle) as Plik;
            GrupaPlikow gr = gv.SourceRow as GrupaPlikow;
            if (g != null)
            {
                g.Grupa = gr;
                g.SetAdded();
            }
        }

        private void simpleButton3_Click(object sender, EventArgs e)
        {
            GetGrupyPlikow(10);
        }

        private void gridView1_KeyDown(object sender, KeyEventArgs e)
        {
            GridView gv = sender as GridView;
            if (e.KeyCode == Keys.Delete)
            {
                BaseDomainObject dom = gv.GetRow(gv.FocusedRowHandle) as BaseDomainObject;
                if(dom!=null){
                    dom.Delete();
                    gv.RefreshData();
                }
            }
        }

        private void simpleButton4_Click(object sender, EventArgs e)
        {
            ds.ShowCurrent();
            foreach (GrupaPlikow g in ds)
                g.Pliki.ShowCurrent();
        }

        private void simpleButton5_Click(object sender, EventArgs e)
        {
            ds.ShowModified();
            foreach (GrupaPlikow g in ds)
                g.Pliki.ShowModified();
        }

        private void simpleButton6_Click(object sender, EventArgs e)
        {
            ds.ShowAll();
            foreach (GrupaPlikow g in ds)
                g.Pliki.ShowAll();
        }

        private void gridView1_MasterRowExpanding(object sender, MasterRowCanExpandEventArgs e)
        {
            GrupaPlikow g = gridView1.GetRow(e.RowHandle) as GrupaPlikow;
            if (g != null)
            {
                g.GetPliki();
            }
        }
    }
}
